# Cosmopolitan zsh make helper.
# Setup (in ~/.zshrc, for instance):
#     fpath+=($COSMO/tool/zsh)
#     autoload -Uz mmake
# e.g.:
#     mmake tiny ape/ape.elf
local mode
case $1 in
  aarch64|x86_64|aarch64-(zero|tiny)|x86_64-tiny)     ;&
  zero|fastbuild|opt|optlinux|rel|asan|dbg|sysv)      ;&
  tiny(|linux(|bsd)|sysv|nowin)|nox87|llvm|ansi)      ##
                    mode=$1;                    shift ;;
  (m|MODE)=*)       mode=${1#*=};               shift ;;
  *)                mode=${MODE:-${m}}                ;;
esac
[[ -z $mode ]] && {
  local arch=$(uname -m)
  case $arch in
    arm64|aarch64)  mode=aarch64                      ;;
  esac
}
local -a targs
local -a flags
local j
while (( $# > 0 )); do
  case $1 in
    all|o|bins|check|test|depend|tags|aarch64)        ;&
    clean|toolchain|clean_toolchain|o/$mode/*)        ##
                    targs+=($1);                shift ;;
    -j*)            j=$1;                       shift ;;
    -*|*=*)         flags+=($1);                shift ;;
    o/(|aarch64)/*) targs+=(o/$mode/${1#*/*/}); shift ;;
    o/*)            targs+=(o/$mode/${1#*/});   shift ;;
    *)              targs+=(o/$mode/$1);        shift ;;
  esac
done
[[ -z $j ]] && {
  whence nproc >/dev/null || autoload -Uz nproc
  j=-j$(nproc)
}
local make=$(
  case $MAKE in
    */*)            echo $MAKE                        ;;
    ?*)             command -v $MAKE                  ;;
    *)              echo .cosmocc/current/bin/make    ;;
  esac
)
if [[ ! -x $make ]]; then
  { echo 'please install a suitable make, for example:'
    echo
    echo 'https://cosmo.zip/pub/cosmos/bin/make'
    echo
    echo 'then put it on $PATH or point $MAKE to it.'
  } >&2; return 1
fi
( set -x
  exec $make $j $flags MODE=$mode $targs )
# vim:ft=zsh
